home *** CD-ROM | disk | FTP | other *** search
- {$S0, D-}
- PROGRAM system ;
-
- CONST
- rsc_filename = 'system.rsc' ;
-
- datum_def = '010187' ; { Default-Werte für Datum und Zeit }
- zeit_def = '070000' ;
-
- alarm1_ein_def = '063000' ; { Default-Werte für Alarmzeiten }
- alarm1_aus_def = '071500' ;
- alarm2_ein_def = '070000' ;
- alarm2_aus_def = '074500' ;
- alarm3_ein_def = '073000' ;
- alarm3_aus_def = '081500' ;
- alarm4_ein_def = '083000' ;
- alarm4_aus_def = '120000' ;
-
- elite_flag = 1 ; { EPSON- Schriftarten (ESC !) }
- schmal_flag = 4 ;
- fett_flag = 8 ;
- doppel_flag = 16 ;
- breit_flag = 32 ;
-
- gering = 1 ; { Tastaturparameter - Standardwerte }
- mittel = 2 ; { Umrechnung siehe PROC Parameter_Setzen }
- hoch = 3 ;
-
- max_plaenge = 99 ; { Maximalwerte für Druckereinstellung }
- max_perf = 30 ;
- max_zeilenabst = 36 ;
- max_links = 70 ;
- max_rechts = 80 ;
-
- std_plaenge = 72 ; { Standardwerte für Druckereinstellung }
- std_perf = 8 ;
- std_zeilenabst = 12 ;
- std_links = 6 ;
- std_rechts = 80 ;
-
- { RSC-File Konstanten }
-
- SYSTEM = 0; (* TREE *)
- SDATUM = 4; (* OBJECT in TREE #0 *)
- SZEIT = 7; (* OBJECT in TREE #0 *)
- ALARM1 = 9; (* OBJECT in TREE #0 *)
- ALARM2 = 10; (* OBJECT in TREE #0 *)
- ALARM3 = 11; (* OBJECT in TREE #0 *)
- ALARM4 = 12; (* OBJECT in TREE #0 *)
- UHR = 14; (* OBJECT in TREE #0 *)
- SYSOK = 29; (* OBJECT in TREE #0 *)
- SYSABBR = 30; (* OBJECT in TREE #0 *)
- SALSETZ = 23; (* OBJECT in TREE #0 *)
- SPARSETZ = 24; (* OBJECT in TREE #0 *)
- SCHALT = 25; (* OBJECT in TREE #0 *)
- STDTEXT = 26; (* OBJECT in TREE #0 *)
- STDGRAF = 27; (* OBJECT in TREE #0 *)
- DRUFEIN = 28; (* OBJECT in TREE #0 *)
-
- DRUCKER = 1; (* TREE *)
- MATRIX = 4; (* OBJECT in TREE #1 *)
- TYPENRAD = 5; (* OBJECT in TREE #1 *)
- PARALLEL = 8; (* OBJECT in TREE #1 *)
- SERIELL = 9; (* OBJECT in TREE #1 *)
- ENDLOS = 11; (* OBJECT in TREE #1 *)
- EINZEL = 12; (* OBJECT in TREE #1 *)
- GR960 = 15; (* OBJECT in TREE #1 *)
- GR1280 = 16; (* OBJECT in TREE #1 *)
- PLAENGE = 26; (* OBJECT in TREE #1 *)
- PERF = 27; (* OBJECT in TREE #1 *)
- ZEILENA = 28; (* OBJECT in TREE #1 *)
- LINKS = 29; (* OBJECT in TREE #1 *)
- RECHTS = 30; (* OBJECT in TREE #1 *)
- NORM = 36; (* OBJECT in TREE #1 *)
- POTENZ = 37; (* OBJECT in TREE #1 *)
- INDEX = 38; (* OBJECT in TREE #1 *)
- ELITE = 40; (* OBJECT in TREE #1 *)
- DOPPEL = 41; (* OBJECT in TREE #1 *)
- SCHMAL = 42; (* OBJECT in TREE #1 *)
- FETT = 43; (* OBJECT in TREE #1 *)
- KURSIV = 44; (* OBJECT in TREE #1 *)
- UNTERSTR = 45; (* OBJECT in TREE #1 *)
- BREIT = 46; (* OBJECT in TREE #1 *)
- PROP = 47; (* OBJECT in TREE #1 *)
- DRUOK = 48; (* OBJECT in TREE #1 *)
- DRUABBR = 49; (* OBJECT in TREE #1 *)
-
- ALARMSET = 2; (* TREE *)
- ALARMNR1 = 20; (* OBJECT in TREE #2 *)
- ALARMNR2 = 21; (* OBJECT in TREE #2 *)
- ALARMNR3 = 22; (* OBJECT in TREE #2 *)
- ALARMNR4 = 23; (* OBJECT in TREE #2 *)
- DATUMEIN = 5; (* OBJECT in TREE #2 *)
- ZEITEIN = 9; (* OBJECT in TREE #2 *)
- DATUMAUS = 14; (* OBJECT in TREE #2 *)
- ZEITAUS = 17; (* OBJECT in TREE #2 *)
- TON = 26; (* OBJECT in TREE #2 *)
- EXT1 = 27; (* OBJECT in TREE #2 *)
- EXT2 = 28; (* OBJECT in TREE #2 *)
- EXT3 = 29; (* OBJECT in TREE #2 *)
- EXT4 = 30; (* OBJECT in TREE #2 *)
- ASETOK = 31; (* OBJECT in TREE #2 *)
- ASETABBR = 32; (* OBJECT in TREE #2 *)
- ALRESET = 33; (* OBJECT in TREE #2 *)
-
- PARAMSET = 3; (* TREE *)
- REPGER = 3; (* OBJECT in TREE #3 *)
- REPMIT = 4; (* OBJECT in TREE #3 *)
- REPHOCH = 5; (* OBJECT in TREE #3 *)
- VERZGER = 9; (* OBJECT in TREE #3 *)
- VERZMIT = 10; (* OBJECT in TREE #3 *)
- VERZHOCH = 11; (* OBJECT in TREE #3 *)
- TASTOK = 12; (* OBJECT in TREE #3 *)
- TASTABBR = 13; (* OBJECT in TREE #3 *)
-
-
- {$I gemconst.pas}
-
- TYPE
- dru_tab_type = RECORD
- art : (art_matrix, art_typenrad) ;
- schnittstelle : (sch_parallel, sch_seriell) ;
- papier : (pap_endlos, pap_einzel) ;
- grafik : (pkte960, pkte1280) ;
- p_laenge : integer ;
- perforation : integer ;
- zeilenabstand : integer ;
- linker_rand : integer ;
- rechter_rand : integer ;
- schrift : (schr_normal, schr_potenz, schr_index) ;
- schriftart : integer ;
- proportional : (prop_an, prop_aus) ;
- kursiv : (kursiv_an, kursiv_aus) ;
- unterstrichen : (unterstr_an, unterstr_aus) ;
- END ;
-
- param_tab_type = RECORD
- verz : integer ; { Verzögerung }
- rep : integer ; { Repeat-Geschwindigkeit }
- END ;
-
- schalter = (an, aus) ;
-
- alarm_tab_type = RECORD
- zustand : schalter ;
- datum_ein : integer ;
- datum_aus : integer ;
- zeit_ein : integer ;
- zeit_aus : integer ;
- tonsignal : schalter ;
- extern1 : schalter ;
- extern2 : schalter ;
- extern3 : schalter ;
- extern4 : schalter ;
- END ;
-
- x32_type = PACKED ARRAY[1..300] OF byte ; { Dreiklang }
-
- {$I gemtype.pas}
-
-
- VAR
- { Programmvariablen }
- eintrag : str255 ;
- system_zei, drucker_zei, alarmset_zei, param_zei,
- schalten_zei : Dialog_Ptr ;
- auswahl, pushed, config, d_status, d_test, dummy,
- event, ap_id : integer ;
- message : Message_Buffer ;
- No_Dialog : boolean ;
- screen, akt_screen : long_integer ;
-
- { Tastaturparameter-Variablen }
- param_tab : param_tab_type ;
-
- { Drucker-Einstellungs-Variablen }
- dru_tab : dru_tab_type ;
- dru_reset, dru_paplaenge, dru_perforation,
- dru_zeiabstand, dru_links, dru_rechts, dru_potenz,
- dru_index, dru_normal, dru_prop_an, dru_prop_aus,
- dru_kursiv_an, dru_kursiv_aus, dru_unterstr_an,
- dru_unterstr_aus, dru_schriftart, dru_make_zeiabstand : string[20] ;
- std_text, std_grafik : string ;
-
- { Alarm und Zeit-Variablen }
- datum, zeit, switch, fehler, al_datum,
- kanal1, kanal2, kanal3, kanal4, schaltok : integer ;
- alarm_tab : ARRAY [1..4] OF alarm_tab_type ;
- dummy_str, datum_str, zeit_str,
- datumein_str, datumaus_str, zeitein_str,
- zeitaus_str : str255 ;
- uhr_flag, dummy_flag, alarm1_flag : boolean ;
- alarm_flag : ARRAY[1..4] OF boolean ;
- dreiklang : x32_type ;
-
-
- {$I gemsubs.pas}
-
-
- { ======================= allgemeine Systemroutinen ======================= }
-
-
- FUNCTION log_Base : integer ; XBIOS(3) ;
-
- PROCEDURE set_date (datum : integer) ; GEMDOS ($2B) ;
-
- PROCEDURE set_time (zeit : integer) ; GEMDOS ($2D) ;
-
- FUNCTION get_date : integer ; GEMDOS ($2A) ;
-
- FUNCTION get_time : integer ; GEMDOS ($2C) ;
-
-
- {----------------- Rückwandel : Wandelt Eingabestring in Integer -------------}
-
- FUNCTION Rueckwandel (zahl_str : string) : integer ;
-
- BEGIN
- dummy := 0 ;
- IF (zahl_str[1] > '0') AND (zahl_str[1] <= '9') THEN
- dummy := (ORD (zahl_str[1]) - 48) * 10 ;
- IF (zahl_str[2] > '0') AND (zahl_str[2] <= '9') THEN
- dummy := dummy + (ORD (zahl_str[2]) - 48) ;
- Rueckwandel := dummy ;
- END ;
-
-
- {--------------- Wandel : Wandelt pos. Integer in String (max.99) -----------}
-
- PROCEDURE Wandel (zahl : integer; VAR zahl_str : string) ;
-
- VAR
- i : integer ;
-
- BEGIN
-
- i := TRUNC (zahl / 10) ;
- IF (i > 0) THEN
- zahl_str := chr (48 + i)
- ELSE
- zahl_str := ' ' ;
-
- zahl := zahl - i*10 ;
- zahl_str := CONCAT (zahl_str, chr (48 + zahl) ) ;
- END ;
-
-
- { -------------- T_Wandel : Wandelt Zeitzahl in String -------- ------------- }
-
- PROCEDURE T_Wandel (zahl : integer; VAR zahl_str : string) ;
-
- VAR
- i : integer ;
-
- BEGIN
-
- i := TRUNC (zahl / 10) ;
- IF (i > 0) THEN
- zahl_str := chr (48 + i)
- ELSE
- zahl_str := '0' ;
-
- zahl := zahl - i*10 ;
- zahl_str := CONCAT (zahl_str, chr (48 + zahl) ) ;
- END ;
-
-
- { ----------------- Wandel_Date : Wandelt Datum in String -------------------}
-
- PROCEDURE Wandel_Date (date : integer ; VAR date_str : string) ;
-
- VAR neg_flag : boolean ;
- jahr, mon, tag : integer ;
-
-
- BEGIN
- neg_flag := false ;
- IF date < 0 THEN
- BEGIN
- neg_flag := true ;
- date := date & $7FFF ;
- END ;
- jahr := TRUNC (date / 512) ;
- mon := date - 512 * jahr ;
- tag := mon ;
-
- jahr := jahr + 80 ;
- IF neg_flag THEN jahr := jahr + 64 ;
- IF jahr > 100 THEN jahr := jahr - 100 ;
- mon := TRUNC (mon / 32) ;
- tag := tag - 32 * mon ;
-
- T_Wandel (tag, date_str) ;
- T_Wandel (mon, dummy_str) ;
- date_str := CONCAT (date_str, dummy_str) ;
- T_Wandel (jahr, dummy_str) ;
- date_str := CONCAT (date_str, dummy_str) ;
- END ;
-
-
- { ----------------- Wandel_Time : Wandelt Zeit in String --------------------}
-
- PROCEDURE Wandel_Time (time : integer ; VAR time_str : string) ;
-
- VAR neg_flag : boolean ;
- std, min, sek : integer ;
-
- BEGIN
- neg_flag := false ; { Wenn die Zeit > 16.00 Uhr ist, ist time }
- { negativ. }
- IF time < 0 THEN
- BEGIN
- neg_flag := true ;
- time := time & $7FFF ;
- END ;
- std := TRUNC (time / 2048) ;
- min := time - 2048 * std ;
- sek := min ;
-
- IF neg_flag THEN std := std + 16 ;
- min := TRUNC (min / 32) ;
- sek := (sek - 32 * min) * 2 ;
-
- T_Wandel (std, time_str) ;
- T_Wandel (min, dummy_str) ;
- time_str := CONCAT (time_str, dummy_str) ;
- T_Wandel (sek, dummy_str) ;
- time_str := CONCAT (time_str, dummy_str) ;
- END ;
-
-
- { ------------- Rueckwandel_Datum : Wandelt String in Datum -----------------}
-
- PROCEDURE Rueckwandel_Datum (eingabe_buf : string ;
- VAR date : integer ;
- VAR eingabe_flag : boolean) ;
-
- VAR jahr, mon, tag : integer ;
-
- BEGIN
- eingabe_flag := true ;
- jahr := (ORD (eingabe_buf[5]) - 48)*10 + ORD (eingabe_buf[6]) - 48 ;
-
- mon := (ORD (eingabe_buf[3]) - 48)*10 + ORD (eingabe_buf[4]) - 48 ;
- IF (mon > 12) OR (mon = 0) THEN eingabe_flag := false ;
-
- tag := (ORD (eingabe_buf[1]) - 48)*10 + ORD (eingabe_buf[2]) - 48 ;
- IF (tag > 31) OR (tag = 0) THEN eingabe_flag := false ;
- IF (mon = 4) OR (mon = 6) OR (mon = 9) OR (mon =11) THEN
- IF tag > 30 THEN eingabe_flag := false ;
- IF (mon = 2) THEN
- IF ((tag > 28) AND (TRUNC(jahr/4) <> jahr/4)) OR (tag > 29) THEN
- eingabe_flag := false ;
-
- date := (jahr - 80) * 512 + mon * 32 + tag ;
- END ;
-
-
- {------------- Inc_Datum : erzeugt Datum des folgenden Tages ----------------}
-
- FUNCTION Inc_Datum (heute : str255) : integer ;
-
- VAR jahr, mon, tag : integer ;
-
- BEGIN
- jahr := (ORD (heute[5]) - 48)*10 + ORD (heute[6]) - 48 ;
-
- mon := (ORD (heute[3]) - 48)*10 + ORD (heute[4]) - 48 ;
-
- tag := (ORD (heute[1]) - 48)*10 + ORD (heute[2]) - 48 ;
- tag := tag + 1 ; { INKREMENT !! }
- IF (tag > 31) THEN tag := 1 ;
- IF (mon = 4) OR (mon = 6) OR (mon = 9) OR (mon =11) THEN
- IF tag > 30 THEN tag := 1 ;
- IF (mon = 2) THEN
- IF ((tag > 28) AND (TRUNC(jahr/4) <> jahr/4)) OR (tag > 29) THEN tag := 1 ;
-
- IF tag = 1 THEN
- BEGIN
- mon := mon + 1 ;
- IF mon > 12 THEN
- BEGIN
- mon := 1 ;
- jahr := jahr + 1 ;
- END ;
- END ;
-
- Inc_Datum := (jahr - 80) * 512 + mon * 32 + tag ;
- END ;
-
-
- { ------------- Rueckwandel_Zeit : Wandelt String in Zeit -------------------}
-
- PROCEDURE Rueckwandel_Zeit (eingabe_buf : string ;
- VAR time : integer ;
- VAR eingabe_flag : boolean) ;
-
- VAR std, min, sek : integer ;
-
- BEGIN
- eingabe_flag := true ;
- sek := (ORD (eingabe_buf[5]) - 48)*10 + ORD (eingabe_buf[6]) - 48 ;
- sek := TRUNC ((sek + 1) / 2) ;
- IF sek > 29 THEN sek := 29 ;
-
- min := (ORD (eingabe_buf[3]) - 48)*10 + ORD (eingabe_buf[4]) - 48 ;
- IF min > 59 THEN eingabe_flag := false ;
-
- std := (ORD (eingabe_buf[1]) - 48)*10 + ORD (eingabe_buf[2]) - 48 ;
- IF std > 23 THEN eingabe_flag := false ;
-
- time := std * 2048 + min * 32 + sek ;
- END ;
-
-
- {---------------------- Check_Zeit : testet Alarmzeit (oder Datum) -----------}
-
- FUNCTION Check_Zeit (time1, time2 : integer) : boolean ;
-
- VAR neg_flag1, neg_flag2 : boolean ;
-
- BEGIN
- Check_Zeit := false ;
- neg_flag1 := false ;
- neg_flag2 := false ;
- IF time1 < 0 THEN neg_flag1 := true ;
- IF time2 < 0 THEN neg_flag2 := true ;
- IF neg_flag2 AND NOT neg_flag1 THEN Check_Zeit := true ;
- IF neg_flag1 = neg_flag2 THEN
- BEGIN
- time1 := time1 &$7FFF ;
- time2 := time2 &$7FFF ;
- IF time1 <= time2 THEN Check_Zeit := true ;
- END ;
- END ;
-
-
- {------------------ Do_Switch : Bedient Schaltinterface ----------------------}
-
- PROCEDURE Do_Switch (neuer_zustand : integer) ;
-
- VAR
- temp : integer ;
-
- BEGIN
- temp := 0 ;
- IF neuer_zustand & $0001 <> 0 THEN temp := temp | 8 ; { Korrektur wegen }
- IF neuer_zustand & $0002 <> 0 THEN temp := temp | 2 ; { Schaltungsfehler }
- IF neuer_zustand & $0004 <> 0 THEN temp := temp | 1 ; { meines Interfaces}
- IF neuer_zustand & $0008 <> 0 THEN temp := temp | 4 ;
- rewrite (output, 'PRN:') ; { Schaltinterface wird am Druckerport betrieben }
- write (chr(temp)) ;
- rewrite (output, 'CON:') ;
- END ;
-
-
- {---------------- Do_Gong : Läßt Dreiklang erklingen -------------------------}
-
- FUNCTION playing : boolean;
-
- FUNCTION gia(data : byte ; reg : integer) : byte ; XBIOS (28);
-
- BEGIN
- playing := (gia(0, 7) & 2)=0
- END;
-
-
- PROCEDURE Do_Gong (i : integer) ;
-
- VAR j : integer ;
-
- PROCEDURE play (VAR music : x32_type) ; XBIOS (32) ;
-
- BEGIN
- play (dreiklang) ;
- IF (alarm_tab[i].extern1 = aus) AND (alarm_tab[i].extern2 = aus) AND
- (alarm_tab[i].extern3 = aus) AND (alarm_tab[i].extern4 = aus) THEN
- BEGIN
- alarm_tab[i].zustand := aus ; { Falls nur Notensymbol ausgewählt }
- alarm_flag[i] := false ;
- END ;
- END ;
-
-
- {================ I N I T I A L I S I E R U N G ============================}
-
- PROCEDURE initialisiere ;
-
- VAR index : integer ; { Index für Dreiklang }
-
- BEGIN
-
- datum_str := datum_def ;
- zeit_str := zeit_def ;
- Rueckwandel_Datum (datum_str, datum, dummy_flag) ;
- Set_Date (datum) ; { Datum & Uhrzeit auf Defaultwerte setzen }
- Rueckwandel_Zeit (zeit_str, zeit, dummy_flag) ;
- Set_Time (zeit) ;
-
- screen := log_Base ; { ermitteln der log. Bildschirmadresse }
-
- switch := 0 ; { Voreinstellung Schaltinterface }
- { (wird nicht ausgeführt !) }
-
- uhr_flag := true ; { ständige Zeitanzeige an }
-
- No_Dialog := true ; { erster Dialogaufruf }
-
-
- {--------------------- Initialisierung Drucker (inkl. Steuerzeichen) ---------}
-
- {--------- Steuerzeichen (müssen dem Drucker angepasst werden) -----------}
-
- { Drucker-Initialisierung }
- dru_reset := CONCAT ( chr(27), '@') ;
-
- { Seitenlänge über Zeilenzahl setzen }
- dru_paplaenge := CONCAT ( chr(27), 'C' ) ; { + Anzahl Zeilen }
-
- { Zeilen am Seitenende überspringen }
- dru_perforation := CONCAT ( chr(27), 'N') ; { + Anzahl Zeilen }
-
- { Zeilenabstand auf n/72" setzen }
- dru_zeiabstand := CONCAT ( chr(27), 'A') ; { + /72" }
- dru_make_zeiabstand := '' ; { CONCAT ( chr(27), '2') für Star-Drucker }
-
- { linken und rechten Rand setzen }
- dru_links := CONCAT ( chr(27), 'l') ; { + Anzahl Zeichen }
- dru_rechts := CONCAT ( chr(27), 'Q') ; { + Anzahl Zeichen }
-
- { Superscript an, Subscript an, Super- und Subscript aus }
- dru_potenz := CONCAT ( chr(27), 'S', chr(0) ) ;
- dru_index := CONCAT ( chr(27), 'S', chr(1) ) ;
- dru_normal := CONCAT ( chr(27), 'T' ) ;
-
- { Proportionalschrift an, aus }
- dru_prop_an := CONCAT ( chr(27), 'p', chr(1) ) ;
- dru_prop_aus := CONCAT ( chr(27), 'p', chr(0) ) ;
-
- { Kursive Schrift an, aus (alternativer Zeichensatz) }
- dru_kursiv_an := CONCAT ( chr(27), '4' ) ;
- dru_kursiv_aus := CONCAT ( chr(27), '5' ) ;
-
- { Unterstreichen an, aus }
- dru_unterstr_an := CONCAT ( chr(27), '-', chr(1) ) ;
- dru_unterstr_aus := CONCAT ( chr(27), '-', chr(0) ) ;
-
- { Schriftart wählen (Master-Modus) }
- dru_schriftart := CONCAT ( chr(27), '!' ) ; { + Code ; s. Konstanten }
-
-
- {--------------- Standard-Text_Einstellung -------------------------------}
-
- std_text := CONCAT (dru_reset, dru_paplaenge, chr(72),
- dru_perforation, chr(8),
- dru_zeiabstand, chr(12), dru_make_zeiabstand,
- dru_links, chr(6),
- dru_rechts, chr(80),
- dru_schriftart, chr(elite_flag + doppel_flag) ) ;
-
- {--------------- Standard-Grafik_Einstellung -----------------------------}
-
- std_grafik := CONCAT (dru_reset, dru_paplaenge, chr(72),
- dru_perforation, chr(0),
- dru_zeiabstand, chr(12), dru_make_zeiabstand,
- dru_links, chr(0),
- dru_rechts, chr(80) ) ;
-
- {--------------- Standardwerte für Feineinstellung ------------------------}
-
- WITH dru_tab DO
- BEGIN { s.a. Konstantendefinitionen }
- art := art_matrix ;
- schnittstelle := sch_parallel ;
- papier := pap_endlos ;
- grafik := pkte960 ;
- p_laenge := std_plaenge ;
- perforation := std_perf ;
- zeilenabstand := std_zeilenabst ;
- linker_rand := std_links ;
- rechter_rand := std_rechts ;
- schrift := schr_normal ;
- schriftart := 0 ;
- proportional := prop_aus ;
- kursiv := kursiv_aus ;
- unterstrichen := unterstr_aus ;
- END ;
-
- {--------------- Tastaturparameter-Voreinstellung -------------------------}
-
- param_tab.verz := mittel ; { Verzögerung bis zum ersten Repeat }
- param_tab.rep := hoch ; { Repeat-Geschwindigkeit }
- { werden NICHT ausgeführt ! }
-
- {--------------- Dreiklang 'komponieren' -----------------------------------}
-
- dreiklang[ 1] := 8 ; dreiklang[ 2] := 16 ; dreiklang[ 3] := 9 ;
- dreiklang[ 4] := 0 ; dreiklang[ 5] := 10 ; dreiklang[ 6] := 0 ;
- dreiklang[ 7] := 11 ; dreiklang[ 8] := 1 ; dreiklang[ 9] := 12 ;
- dreiklang[10] := 0 ; dreiklang[11] := 13 ; dreiklang[12] := 9 ;
- dreiklang[13] := 7 ; dreiklang[14] := 248 ; dreiklang[15] := 0 ;
- dreiklang[16] := 219; dreiklang[17] := 1 ; dreiklang[18] := 1 ;
- dreiklang[19] := 12 ; dreiklang[20] := 48 ; dreiklang[21] := 13 ;
- dreiklang[22] := 9 ; dreiklang[23] := 2 ; dreiklang[24] := 121;
- dreiklang[25] := 3 ; dreiklang[26] := 1 ; dreiklang[27] := 9 ;
- dreiklang[28] := 12 ; dreiklang[29] := 4 ; dreiklang[30] := 237;
- dreiklang[31] := 5 ; dreiklang[32] := 0 ; dreiklang[33] := 10 ;
- dreiklang[34] := 12 ; dreiklang[35] := 130 ; dreiklang[36] := 32 ;
- dreiklang[37] := 0 ; dreiklang[38] := 61 ; dreiklang[39] := 13 ;
- dreiklang[40] := 9 ; dreiklang[41] := 2 ; dreiklang[42] := 237;
- dreiklang[43] := 3 ; dreiklang[44] := 0 ; dreiklang[45] := 4 ;
- dreiklang[46] := 188; dreiklang[47] := 130 ; dreiklang[48] := 32 ;
- dreiklang[49] := 0 ; dreiklang[50] := 121 ; dreiklang[51] := 12 ;
- dreiklang[52] := 96 ; dreiklang[53] := 13 ; dreiklang[54] := 9 ;
- dreiklang[55] := 2 ; dreiklang[56] := 219 ; dreiklang[57] := 3 ;
- dreiklang[58] := 1 ; dreiklang[59] := 4 ; dreiklang[60] := 237;
- dreiklang[61] := 130; dreiklang[62] := 64 ; dreiklang[63] := 9 ;
- dreiklang[64] := 0 ; dreiklang[65] := 10 ; dreiklang[66] := 0 ;
- dreiklang[67] := 130; dreiklang[68] := 4 ; dreiklang[69] := 7 ;
- dreiklang[70] := 255; dreiklang[71] := 130 ; dreiklang[72] := 0 ;
-
- FOR index := 73 TO 300 DO dreiklang[index] := 0 ;
- END ;
-
-
- {----------------- Alarm-Voreinstellung ------------------------------------}
-
- PROCEDURE Alarm_Voreinstellung ;
-
- BEGIN
- Wandel_Date (Get_Date, datum_str) ;
- al_datum := Inc_Datum (datum_str) ; { als Default-Datum 'morgen' nehmen }
-
- alarm_flag[1] := false ;
- alarm_flag[2] := false ;
- alarm_flag[3] := false ;
- alarm_flag[4] := false ;
-
- WITH alarm_tab[1] DO
- BEGIN
- zustand := aus ;
- datum_ein := al_datum ; { jeweils aktuelles Datum + 1 }
- datum_aus := al_datum ;
- tonsignal := aus ;
- extern1 := an ;
- extern2 := aus ;
- extern3 := aus ;
- extern4 := aus ;
- END ;
- Rueckwandel_Zeit (alarm1_ein_def, alarm_tab[1].zeit_ein, dummy_flag) ;
- Rueckwandel_Zeit (alarm1_aus_def, alarm_tab[1].zeit_aus, dummy_flag) ;
-
- WITH alarm_tab[2] DO
- BEGIN
- zustand := aus ;
- datum_ein := al_datum ;
- datum_aus := al_datum ;
- tonsignal := aus ;
- extern1 := an ;
- extern2 := aus ;
- extern3 := aus ;
- extern4 := aus ;
- END ;
- Rueckwandel_Zeit (alarm2_ein_def, alarm_tab[2].zeit_ein, dummy_flag) ;
- Rueckwandel_Zeit (alarm2_aus_def, alarm_tab[2].zeit_aus, dummy_flag) ;
-
- WITH alarm_tab[3] DO
- BEGIN
- zustand := aus ;
- datum_ein := al_datum ;
- datum_aus := al_datum ;
- tonsignal := aus ;
- extern1 := an ;
- extern2 := aus ;
- extern3 := aus ;
- extern4 := aus ;
- END ;
- Rueckwandel_Zeit (alarm3_ein_def, alarm_tab[3].zeit_ein, dummy_flag) ;
- Rueckwandel_Zeit (alarm3_aus_def, alarm_tab[3].zeit_aus, dummy_flag) ;
-
- WITH alarm_tab[4] DO
- BEGIN
- zustand := aus ;
- datum_ein := al_datum ;
- datum_aus := al_datum ;
- tonsignal := an ;
- extern1 := an ;
- extern2 := aus ;
- extern3 := aus ;
- extern4 := aus ;
- END ;
- Rueckwandel_Zeit (alarm4_ein_def, alarm_tab[4].zeit_ein, dummy_flag) ;
- Rueckwandel_Zeit (alarm4_aus_def, alarm_tab[4].zeit_aus, dummy_flag) ;
-
- END ;
-
-
- {---------------- Make_Schalten : Dialogerstellung zum Schalten --------------}
-
- PROCEDURE Make_Schalten ;
-
- BEGIN
- schalten_zei := New_Dialog (10, 0, 0, 24, 15) ;
-
- dummy := Add_DItem (schalten_zei, G_Boxtext, none, 2, 1, 20, 2, 2, 4577) ;
- Set_DText (schalten_zei, dummy, ' Schalten ', System_Font, TE_Center) ;
- kanal1 := Add_DItem (schalten_zei, G_Button, Selectable, 4, 4,
- 16, 1, 2, 4096) ;
- Set_DText (schalten_zei, kanal1, 'Kanal 1', System_Font, TE_Center) ;
-
- kanal2 := Add_DItem (schalten_zei, G_Button, Selectable, 4, 6,
- 16, 1, 2, 4096) ;
- Set_DText (schalten_zei, kanal2, 'Kanal 2', System_Font, TE_Center) ;
-
- kanal3 := Add_DItem (schalten_zei, G_Button, Selectable, 4, 8,
- 16, 1, 2, 4096) ;
- Set_DText (schalten_zei, kanal3, 'Kanal 3', System_Font, TE_Center) ;
-
- kanal4 := Add_DItem (schalten_zei, G_Button, Selectable, 4, 10,
- 16, 1, 2, 4096) ;
- Set_DText (schalten_zei, kanal4, 'Kanal 4', System_Font, TE_Center) ;
-
- schaltok := Add_DItem (schalten_zei, G_Button, Selectable|Default|Exit_Btn,
- 6, 13, 12, 1, 2, 4096) ;
- Set_DText (schalten_zei, schaltok, 'OK', System_Font, TE_Center) ;
-
- Center_Dialog (schalten_zei) ;
- END ;
-
-
- {=============== U N T E R P R O G R A M M E =================================}
-
-
- {-----------------------------------------------------------------------------}
- { }
- { DRUCKER : Alles zur Druckervoreinstellung }
- { }
- {-----------------------------------------------------------------------------}
-
-
- {--------------------- Drucker-Systemfunktionen ------------------------------}
-
- FUNCTION drucker_test (dev : integer) : integer ; BIOS (8) ;
-
- FUNCTION set_prt (config : integer) : integer ; XBIOS (33) ;
-
-
- {--------------------- Standard_Text : Einstellung für Textausgabe -----------}
-
- PROCEDURE Standard_Text ;
-
- BEGIN
- REPEAT
- d_test := drucker_test (0) ;
- IF d_test = -1 THEN
- BEGIN
- rewrite (output, 'PRN:') ;
- write (std_text) ; { Definition s. Initialisierung }
- rewrite (output, 'CON:') ;
- d_status := 0 + { Matrix ; 1 für Typenrad }
- 2 + { s/w ; 0 für Farbe }
- 4 + { 960 Pkte ; 0 für 1280 Pkte }
- 0 + { Draft ; 8 für NLQ }
- 0 + { Parallel ; 16 für seriell }
- 0 { endlos ; 32 für Einzelblatt } ;
- config := set_prt (-1) ; { aktuellen Status lesen }
- config := config & $07FC ; { Flags löschen }
- config := config | d_status ;
- dummy := set_prt (config) ; { Druckerflags im Atari setzen }
- END
- ELSE
- auswahl := Do_Alert
- ('[1][ Drucker ist nicht bereit ! ][ Nochmal | Abbruch ]', 1) ;
- UNTIL (d_test = -1) OR (auswahl = 2) ;
- IF d_test = -1 THEN
- BEGIN
- End_Dialog (system_zei) ;
- fehler := 0 ;
- END
- ELSE
- fehler := 128 ;
- END ;
-
-
- {--------------------- Standard_Grafik : Einstellung für Grafik --------------}
-
- PROCEDURE Standard_Grafik ;
-
- BEGIN
- REPEAT
- d_test := drucker_test (0) ;
- IF d_test = -1 THEN
- BEGIN
- rewrite (output, 'PRN:') ;
- write (std_grafik) ; { Definition s. Initialisierung }
- rewrite (output, 'CON:') ;
- d_status := 0 + { Matrix ; 1 für Typenrad }
- 2 + { s/w ; 0 für Farbe }
- 4 + { 960 Pkte ; 0 für 1280 Pkte }
- 0 + { Draft ; 8 für NLQ }
- 0 + { Parallel ; 16 für seriell }
- 0 { endlos ; 32 für Einzelblatt } ;
- config := set_prt (-1) ; { aktuellen Status lesen }
- config := config & $07FC ; { Flags löschen }
- config := config | d_status ;
- dummy := set_prt (config) ; { Druckerflags im Atari setzen }
- END
- ELSE
- auswahl := Do_Alert
- ('[1][ Drucker ist nicht bereit ! ][ Nochmal | Abbruch ]', 1) ;
- UNTIL (d_test = -1) OR (auswahl = 2) ;
- IF d_test = -1 THEN
- BEGIN
- End_Dialog (system_zei) ;
- fehler := 0 ;
- END
- ELSE
- fehler := 128 ;
- END ;
-
-
- {----------------- Drucker_Feineinstellung ---------------------------------}
-
- PROCEDURE Drucker_Feineinstellung ;
-
- VAR
- zahl_str, eingabe_str, init_sequenz : str255 ;
-
- BEGIN
- IF dru_tab.art = art_matrix THEN { MATRIX }
- Obj_SetState (drucker_zei, matrix, selected, false)
- ELSE
- Obj_SetState (drucker_zei, matrix, normal, false) ;
- IF dru_tab.art = art_typenrad THEN { TYPENRAD }
- Obj_SetState (drucker_zei, typenrad, selected, false)
- ELSE
- Obj_SetState (drucker_zei, typenrad, normal, false) ;
- IF dru_tab.schnittstelle = sch_parallel THEN { PARALLEL }
- Obj_SetState (drucker_zei, parallel, selected, false)
- ELSE
- Obj_SetState (drucker_zei, parallel, normal, false) ;
- IF dru_tab.schnittstelle = sch_seriell THEN { SERIELL }
- Obj_SetState (drucker_zei, seriell, selected, false)
- ELSE
- Obj_SetState (drucker_zei, seriell, normal, false) ;
- IF dru_tab.papier = pap_endlos THEN { ENDLOS-PAPIER }
- Obj_SetState (drucker_zei, endlos, selected, false)
- ELSE
- Obj_SetState (drucker_zei, endlos, normal, false) ;
- IF dru_tab.papier = pap_einzel THEN { EINZELBLATT }
- Obj_SetState (drucker_zei, einzel, selected, false)
- ELSE
- Obj_SetState (drucker_zei, einzel, normal, false) ;
- IF dru_tab.grafik = pkte960 THEN { 960 Pkte }
- Obj_SetState (drucker_zei, gr960, selected, false)
- ELSE
- Obj_SetState (drucker_zei, gr960, normal, false) ;
- IF dru_tab.grafik = pkte1280 THEN { 1280 Pkte }
- Obj_SetState (drucker_zei, gr1280, selected, false)
- ELSE
- Obj_SetState (drucker_zei, gr1280, normal, false) ;
-
- IF dru_tab.schrift = schr_normal THEN { Größe normal }
- Obj_SetState (drucker_zei, norm, selected, false)
- ELSE
- Obj_SetState (drucker_zei, norm, normal, false) ;
- IF dru_tab.schrift = schr_potenz THEN { " Potenz }
- Obj_SetState (drucker_zei, potenz, selected, false)
- ELSE
- Obj_SetState (drucker_zei, potenz, normal, false) ;
- IF dru_tab.schrift = schr_index THEN { " Index }
- Obj_SetState (drucker_zei, index, selected, false)
- ELSE
- Obj_SetState (drucker_zei, index, normal, false) ;
-
- IF dru_tab.proportional = prop_an THEN { PROPORTIONAL }
- Obj_SetState (drucker_zei, prop, selected, false)
- ELSE
- Obj_SetState (drucker_zei, prop, normal, false) ;
-
- IF dru_tab.kursiv = kursiv_an THEN { KURSIV }
- Obj_SetState (drucker_zei, kursiv, selected, false)
- ELSE
- Obj_SetState (drucker_zei, kursiv, normal, false) ;
-
- IF dru_tab.unterstrichen = unterstr_an THEN { UNTERSTRICHEN }
- Obj_SetState (drucker_zei, unterstr, selected, false)
- ELSE
- Obj_SetState (drucker_zei, unterstr, normal, false) ;
-
- IF dru_tab.schriftart & elite_flag <> 0 THEN { ELITE }
- Obj_SetState (drucker_zei, elite, selected, false)
- ELSE
- Obj_SetState (drucker_zei, elite, normal, false) ;
-
- IF dru_tab.schriftart & schmal_flag <> 0 THEN { SCHMAL }
- Obj_SetState (drucker_zei, schmal, selected, false)
- ELSE
- Obj_SetState (drucker_zei, schmal, normal, false) ;
-
- IF dru_tab.schriftart & fett_flag <> 0 THEN { FETT }
- Obj_SetState (drucker_zei, fett, selected, false)
- ELSE
- Obj_SetState (drucker_zei, fett, normal, false) ;
-
- IF dru_tab.schriftart & doppel_flag <> 0 THEN { DOPPEL }
- Obj_SetState (drucker_zei, doppel, selected, false)
- ELSE
- Obj_SetState (drucker_zei, doppel, normal, false) ;
-
- IF dru_tab.schriftart & breit_flag <> 0 THEN { BREIT }
- Obj_SetState (drucker_zei, breit, selected, false)
- ELSE
- Obj_SetState (drucker_zei, breit, normal, false) ;
-
- Wandel (dru_tab.p_laenge, zahl_str) ;
- Set_DEdit(drucker_zei, plaenge, '__', '99', zahl_str, System_Font, TE_Left) ;
-
- Wandel (dru_tab.perforation, zahl_str) ;
- Set_DEdit(drucker_zei, perf, '__', '99', zahl_str, System_Font, TE_Left) ;
-
- Wandel (dru_tab.zeilenabstand, zahl_str) ;
- Set_DEdit(drucker_zei, zeilena, '__', '99', zahl_str, System_Font, TE_Left) ;
-
- Wandel (dru_tab.linker_rand, zahl_str) ;
- Set_DEdit(drucker_zei, links, '__', '99', zahl_str, System_Font, TE_Left) ;
-
- Wandel (dru_tab.rechter_rand, zahl_str) ;
- Set_DEdit(drucker_zei, rechts, '__', '99', zahl_str, System_Font, TE_Left) ;
-
-
- pushed := Do_Dialog (drucker_zei, 0) ;
- Obj_SetState (drucker_zei, pushed, normal, true) ;
- IF pushed = druok THEN
- BEGIN
- init_sequenz := dru_reset ; { A U S W E R T U N G }
-
- d_status := 2 ; { s/w - Drucker }
- IF Obj_State (drucker_zei, typenrad) & Selected <> 0 THEN
- BEGIN
- d_status := d_status + 1 ;
- dru_tab.art := art_typenrad ;
- END
- ELSE
- dru_tab.art := art_matrix ;
- IF Obj_State (drucker_zei, seriell) & Selected <> 0 THEN
- BEGIN
- d_status := d_status + 16 ;
- dru_tab.schnittstelle := sch_seriell ;
- END
- ELSE
- dru_tab.schnittstelle := sch_parallel ;
- IF Obj_State (drucker_zei, einzel) & Selected <> 0 THEN
- BEGIN
- d_status := d_status + 32 ;
- dru_tab.papier := pap_einzel ;
- END
- ELSE
- dru_tab.papier := pap_endlos ;
- IF Obj_State (drucker_zei, gr960) & Selected <> 0 THEN
- BEGIN
- d_status := d_status + 4 ;
- dru_tab.grafik := pkte960 ;
- END
- ELSE
- dru_tab.grafik := pkte1280 ;
-
- Get_DEdit (drucker_zei, plaenge, eingabe_str) ;
- dru_tab.p_laenge := Rueckwandel (eingabe_str) ;
- IF dru_tab.p_laenge > max_plaenge THEN
- dru_tab.p_laenge := std_plaenge ;
- init_sequenz := CONCAT
- (init_sequenz, dru_paplaenge, chr(dru_tab.p_laenge) ) ;
-
- Get_DEdit (drucker_zei, perf, eingabe_str) ;
- dru_tab.perforation := Rueckwandel (eingabe_str) ;
- IF dru_tab.perforation > max_perf THEN
- dru_tab.perforation := std_perf ;
- init_sequenz := CONCAT
- (init_sequenz, dru_perforation, chr(dru_tab.perforation) ) ;
-
- Get_DEdit (drucker_zei, zeilena, eingabe_str) ;
- dru_tab.zeilenabstand := Rueckwandel (eingabe_str) ;
- IF dru_tab.zeilenabstand > max_zeilenabst THEN
- dru_tab.zeilenabstand := std_zeilenabst ;
- init_sequenz := CONCAT
- (init_sequenz, dru_zeiabstand, chr(dru_tab.zeilenabstand),
- dru_make_zeiabstand ) ;
-
- Get_DEdit (drucker_zei, links, eingabe_str) ;
- dru_tab.linker_rand := Rueckwandel (eingabe_str) ;
- IF dru_tab.linker_rand > max_links THEN
- dru_tab.linker_rand := std_links ;
- init_sequenz := CONCAT
- (init_sequenz, dru_links, chr(dru_tab.linker_rand) ) ;
-
- Get_DEdit (drucker_zei, rechts, eingabe_str) ;
- dru_tab.rechter_rand := Rueckwandel (eingabe_str) ;
- IF dru_tab.rechter_rand > max_rechts THEN
- dru_tab.rechter_rand := std_rechts ;
- init_sequenz := CONCAT
- (init_sequenz, dru_rechts, chr(dru_tab.rechter_rand) ) ;
-
- dru_tab.schriftart := 0 ;
- IF Obj_State (drucker_zei, elite) & Selected <> 0 THEN
- dru_tab.schriftart := dru_tab.schriftart + elite_flag ;
- IF Obj_State (drucker_zei, schmal) & Selected <> 0 THEN
- dru_tab.schriftart := dru_tab.schriftart + schmal_flag ;
- IF Obj_State (drucker_zei, fett) & Selected <> 0 THEN
- dru_tab.schriftart := dru_tab.schriftart + fett_flag ;
- IF Obj_State (drucker_zei, doppel) & Selected <> 0 THEN
- dru_tab.schriftart := dru_tab.schriftart + doppel_flag ;
- IF Obj_State (drucker_zei, breit) & Selected <> 0 THEN
- dru_tab.schriftart := dru_tab.schriftart + breit_flag ;
- init_sequenz := CONCAT
- (init_sequenz, dru_schriftart, chr(dru_tab.schriftart) ) ;
-
- IF Obj_State (drucker_zei, norm) & Selected <> 0 THEN
- BEGIN
- dru_tab.schrift := schr_normal ;
- init_sequenz := CONCAT
- (init_sequenz, dru_normal) ;
- END ;
-
- IF Obj_State (drucker_zei, potenz) & Selected <> 0 THEN
- BEGIN
- dru_tab.schrift := schr_potenz ;
- init_sequenz := CONCAT
- (init_sequenz, dru_potenz) ;
- END ;
-
- IF Obj_State (drucker_zei, index) & Selected <> 0 THEN
- BEGIN
- dru_tab.schrift := schr_index ;
- init_sequenz := CONCAT
- (init_sequenz, dru_index) ;
- END ;
-
- IF Obj_State (drucker_zei, prop) & Selected <> 0 THEN
- BEGIN
- dru_tab.proportional := prop_an ;
- init_sequenz := CONCAT
- (init_sequenz, dru_prop_an) ;
- END
- ELSE
- dru_tab.proportional := prop_aus ;
-
- IF Obj_State (drucker_zei, unterstr) & Selected <> 0 THEN
- BEGIN
- dru_tab.unterstrichen := unterstr_an ;
- init_sequenz := CONCAT
- (init_sequenz, dru_unterstr_an) ;
- END
- ELSE
- dru_tab.unterstrichen := unterstr_aus ;
-
- IF Obj_State (drucker_zei, kursiv) & Selected <> 0 THEN
- BEGIN
- dru_tab.kursiv := kursiv_an ;
- init_sequenz := CONCAT
- (init_sequenz, dru_kursiv_an) ;
- END
- ELSE
- dru_tab.kursiv := kursiv_aus ;
-
- REPEAT
- d_test := drucker_test (0) ;
- IF d_test = -1 THEN
- BEGIN
- rewrite (output, 'PRN:') ;
- write (init_sequenz) ; { Initialisierung des Druckers }
- rewrite (output, 'CON:') ;
- END
- ELSE
- auswahl := Do_Alert
- ('[1][ Drucker ist nicht bereit ! ][ Nochmal | Abbruch ]', 1) ;
- UNTIL (d_test = -1) OR (auswahl = 2) ;
-
- config := set_prt (-1) ; { aktuellen Status lesen }
- config := config & $07FC ; { Flags löschen }
- config := config | d_status ;
- dummy := set_prt (config) ; { Druckerflags im Atari setzen }
- END ;
- End_Dialog (drucker_zei) ;
- END ;
-
-
- {-----------------------------------------------------------------------------}
- { }
- { PARAMETER : Tastaturparameter setzen }
- { }
- {-----------------------------------------------------------------------------}
-
- PROCEDURE Parameter_Setzen ;
-
- PROCEDURE kbrate (kb_init, kb_rep : integer) ; XBIOS(35) ;
-
- BEGIN
- CASE param_tab.rep OF
- gering : Obj_SetState (param_zei, repger, selected, false) ;
- mittel : Obj_SetSTate (param_zei, repmit, selected, false) ;
- hoch : Obj_SetSTate (param_zei, rephoch, selected, false) ;
- END ;
- CASE param_tab.verz OF
- gering : Obj_SetState (param_zei, verzger, selected, false) ;
- mittel : Obj_SetSTate (param_zei, verzmit, selected, false) ;
- hoch : Obj_SetSTate (param_zei, verzhoch, selected, false) ;
- END ;
- pushed := Do_Dialog (param_zei, 0) ;
- Obj_SetState (param_zei, pushed, normal, true) ;
- IF pushed = tastok THEN
- BEGIN
- IF Obj_State (param_zei, repger) & Selected <> 0 THEN
- param_tab.rep := gering ;
- IF Obj_State (param_zei, repmit) & Selected <> 0 THEN
- param_tab.rep := mittel ;
- IF Obj_State (param_zei, rephoch) & Selected <> 0 THEN
- param_tab.rep := hoch ;
- IF Obj_State (param_zei, verzger) & Selected <> 0 THEN
- param_tab.verz := gering ;
- IF Obj_State (param_zei, verzmit) & Selected <> 0 THEN
- param_tab.verz := mittel ;
- IF Obj_State (param_zei, verzhoch) & Selected <> 0 THEN
- param_tab.verz := hoch ;
-
- kbrate (10 + param_tab.verz * 10, (5 - param_tab.rep)) ; {Setzen der ein- }
- {gestellten Werte}
- END ;
- Obj_SetState (param_zei, repger, normal, true) ;
- Obj_SetState (param_zei, repmit, normal, true) ;
- Obj_SetState (param_zei, rephoch, normal, true) ;
- Obj_SetState (param_zei, verzger, normal, true) ;
- Obj_SetState (param_zei, verzmit, normal, true) ;
- Obj_SetState (param_zei, verzhoch, normal, true) ;
- End_Dialog (param_zei) ;
- END ;
-
-
- {-----------------------------------------------------------------------------}
- { }
- { ALARM : Alles zur Alarmverwaltung }
- { }
- {-----------------------------------------------------------------------------}
-
-
- {---------------- Do_Alarm_Auswerten -----------------------------------------}
-
- PROCEDURE Do_Alarm_Auswerten (i : integer ; VAR fehlertyp : integer ) ;
-
- VAR korrekt : boolean ;
-
- BEGIN
- fehlertyp := 0 ;
-
- IF Obj_State (alarmset_zei, ton) & Selected <> 0 THEN
- alarm_tab[i].tonsignal := an
- ELSE
- alarm_tab[i].tonsignal := aus ;
- IF Obj_State (alarmset_zei, ext1) & Selected <> 0 THEN
- alarm_tab[i].extern1 := an
- ELSE
- alarm_tab[i].extern1 := aus ;
- IF Obj_State (alarmset_zei, ext2) & Selected <> 0 THEN
- alarm_tab[i].extern2 := an
- ELSE
- alarm_tab[i].extern2 := aus ;
- IF Obj_State (alarmset_zei, ext3) & Selected <> 0 THEN
- alarm_tab[i].extern3 := an
- ELSE
- alarm_tab[i].extern3 := aus ;
- IF Obj_State (alarmset_zei, ext4) & Selected <> 0 THEN
- alarm_tab[i].extern4 := an
- ELSE
- alarm_tab[i].extern4 := aus ;
-
- Get_DEdit (alarmset_zei, datumein, datumein_str) ;
- Rueckwandel_Datum (datumein_str, dummy, korrekt) ;
- IF NOT korrekt THEN fehlertyp := fehlertyp + 1
- ELSE alarm_tab[i].datum_ein := dummy ;
-
- Get_DEdit (alarmset_zei, zeitein, zeitein_str) ;
- Rueckwandel_Zeit (zeitein_str, dummy, korrekt) ;
- IF NOT korrekt THEN fehlertyp := fehlertyp + 4
- ELSE alarm_tab[i].zeit_ein := dummy ;
-
- Get_DEdit (alarmset_zei, datumaus, datumaus_str) ;
- Rueckwandel_Datum (datumaus_str, dummy, korrekt) ;
- IF NOT korrekt THEN fehlertyp := fehlertyp + 2
- ELSE alarm_tab[i].datum_aus := dummy ;
-
- Get_DEdit (alarmset_zei, zeitaus, zeitaus_str) ;
- Rueckwandel_Zeit (zeitaus_str, dummy, korrekt) ;
- IF NOT korrekt THEN fehlertyp := fehlertyp + 8
- ELSE alarm_tab[i].zeit_aus := dummy ;
-
- IF NOT check_zeit (alarm_tab[i].datum_ein, alarm_tab[i].datum_aus) THEN
- alarm_tab[i].datum_aus := alarm_tab[i].datum_ein ;
- IF (NOT check_zeit (alarm_tab[i].zeit_ein, alarm_tab[i].zeit_aus))
- AND (alarm_tab[i].datum_ein = alarm_tab[i].datum_aus) THEN
- fehlertyp := fehlertyp + 16 ;
- { Test, ob Einschaltzeit früher als Ausschaltzeit }
- END ;
-
-
- {----------------- Do_AlarmSet : Alarm verwalten -----------------------------}
-
- PROCEDURE Do_AlarmSet ;
-
- VAR fertig : boolean ;
- nr, fehlernr : integer ;
-
- PROCEDURE Alarm_Init (i : integer) ;
-
- BEGIN
- Wandel_Date (alarm_tab[i].datum_ein, datumein_str) ;
- Wandel_Time (alarm_tab[i].zeit_ein, zeitein_str) ;
- Wandel_Date (alarm_tab[i].datum_aus , datumaus_str) ;
- Wandel_Time (alarm_tab[i].zeit_aus, zeitaus_str) ;
- Set_DEdit (alarmset_zei, datumein, '__/__/__', '999999', datumein_str,
- System_Font, TE_Center) ;
- Set_DEdit (alarmset_zei, zeitein, '__:__.__', '999999', zeitein_str,
- System_Font, TE_Center) ;
- Set_DEdit (alarmset_zei, datumaus, '__/__/__', '999999', datumaus_str,
- System_Font, TE_Center) ;
- Set_DEdit (alarmset_zei, zeitaus, '__:__.__', '999999', zeitaus_str,
- System_Font, TE_Center) ;
-
- IF alarm_tab[i].tonsignal = an THEN
- Obj_SetState (alarmset_zei, ton, selected, true)
- ELSE
- Obj_SetState (alarmset_zei, ton, normal, true) ;
-
- IF alarm_tab[i].extern1 = an THEN
- Obj_SetState (alarmset_zei, ext1, selected, true)
- ELSE
- Obj_SetState (alarmset_zei, ext1, normal, true) ;
-
- IF alarm_tab[i].extern2 = an THEN
- Obj_SetState (alarmset_zei, ext2, selected, true)
- ELSE
- Obj_SetState (alarmset_zei, ext2, normal, true) ;
-
- IF alarm_tab[i].extern3 = an THEN
- Obj_SetState (alarmset_zei, ext3, selected, true)
- ELSE
- Obj_SetState (alarmset_zei, ext3, normal, true) ;
-
- IF alarm_tab[i].extern4 = an THEN
- Obj_SetState (alarmset_zei, ext4, selected, true)
- ELSE
- Obj_SetState (alarmset_zei, ext4, normal, true) ;
- END ;
-
- { ------------- Hauptprozedur Alarmset -----------------------------------}
-
- BEGIN
- nr := 1 ;
- fertig := false ;
- fehlernr := 0 ;
- Alarm_Init (nr) ;
- pushed := Do_Dialog (alarmset_zei, 0) ;
- WHILE NOT fertig DO
- BEGIN
- Obj_SetState (alarmset_zei, pushed, normal, true) ;
- CASE pushed OF
- alarmnr1 : BEGIN
- nr := 1 ;
- Alarm_Init (nr) ;
- END ;
- alarmnr2 : BEGIN
- nr := 2 ;
- Alarm_Init (nr) ;
- END ;
- alarmnr3 : BEGIN
- nr := 3 ;
- Alarm_Init (nr) ;
- END ;
- alarmnr4 : BEGIN
- nr := 4 ;
- Alarm_Init (nr) ;
- END ;
- alreset : Alarm_Voreinstellung ;
- asetok : Do_Alarm_Auswerten (nr, fehlernr) ;
- END ; { CASE }
-
- IF pushed = asetabbr THEN
- BEGIN
- Do_Alarm_Auswerten (nr, fehlernr) ;
- IF fehlernr = 0 THEN fertig := true ;
- END ;
-
- IF fehlernr <> 0 THEN
- BEGIN
- IF fehlernr & 1 <> 0 THEN
- auswahl := Do_Alert ('[2][Falsches Einschaltdatum ! ][ Nochmal ]', 1) ;
- IF fehlernr & 2 <> 0 THEN
- auswahl := Do_Alert ('[2][Falsches Ausschaltdatum ! ][ Nochmal ]', 1) ;
- IF fehlernr & 4 <> 0 THEN
- auswahl := Do_Alert ('[2][Falsche Einschaltuhrzeit ! ][ Nochmal ]', 1) ;
- IF fehlernr & 8 <> 0 THEN
- auswahl := Do_Alert ('[2][Falsche Ausschaltuhrzeit ! ][ Nochmal ]', 1) ;
- IF fehlernr & 16 <> 0 THEN
- auswahl := Do_Alert ('[2][Einschaltzeit > Ausschaltzeit ! ][ Nochmal ]', 1) ;
- END ;
-
- IF NOT fertig THEN
- BEGIN
- Alarm_Init (nr) ;
- pushed := Do_Dialog (alarmset_zei, datumein) ;
- END ;
- END ; { WHILE NOT fertig }
-
- End_Dialog (alarmset_zei) ;
- fehler := 4 ; { damit anschließend Hauptdialog wiedererscheint }
- END ;
-
-
- {-----------------------------------------------------------------------------}
- { }
- { SCHALTEN : Bedienung des Schaltinterfaces }
- { }
- {-----------------------------------------------------------------------------}
-
- PROCEDURE Do_Schalten ;
-
- BEGIN
- IF (switch & $0001) <> 0 THEN
- Obj_SetState (schalten_zei, kanal1, selected, false)
- ELSE
- Obj_SetState (schalten_zei, kanal1, normal, false) ;
-
- IF (switch & $0002) <> 0 THEN
- Obj_SetState (schalten_zei, kanal2, selected, false)
- ELSE
- Obj_SetState (schalten_zei, kanal2, normal, false) ;
-
- IF (switch & $0004) <> 0 THEN
- Obj_SetState (schalten_zei, kanal3, selected, false)
- ELSE
- Obj_SetState (schalten_zei, kanal3, normal, false) ;
-
- IF (switch & $0008) <> 0 THEN
- Obj_SetState (schalten_zei, kanal4, selected, false)
- ELSE
- Obj_SetState (schalten_zei, kanal4, normal, false) ;
-
- pushed := Do_Dialog (schalten_zei, 0) ;
- Obj_SetState (schalten_zei, pushed, normal, true) ;
-
- switch := 0 ;
- IF Obj_State (schalten_zei, kanal1) & Selected <> 0 THEN switch := 1 ;
- IF Obj_State (schalten_zei, kanal2) & Selected <> 0 THEN switch := switch|2 ;
- IF Obj_State (schalten_zei, kanal3) & Selected <> 0 THEN switch := switch|4 ;
- IF Obj_State (schalten_zei, kanal4) & Selected <> 0 THEN switch := switch|8 ;
-
- Do_Switch (switch) ;
- End_Dialog (schalten_zei) ;
-
- fehler := 0 ; { Damit Hauptdialog beendet wird }
- END ;
-
-
- {-----------------------------------------------------------------------------}
- { }
- { SYSTEM : Alles zur Verwaltung des Hauptdialoges }
- { }
- {-----------------------------------------------------------------------------}
-
- {------------------------ Do_Auswerten : Wertet Datum und Uhrzeit... aus -----}
-
- PROCEDURE Do_Auswerten ;
-
- VAR korrekt : boolean ;
- index : integer ;
-
- BEGIN
- fehler := 0 ;
- Get_DEdit (system_zei, sdatum, datum_str) ;
- Get_DEdit (system_zei, szeit, zeit_str) ;
- Rueckwandel_Datum (datum_str, datum, korrekt) ;
- IF NOT korrekt THEN
- BEGIN
- fehler := fehler + 1 ;
- Wandel_Date (get_date, datum_str) ; { Bei Fehleingabe wird das }
- END ; { aktuelle Datum eingesetzt }
- IF fehler & 1 = 0 THEN Set_Date (datum) ;
-
- Rueckwandel_Zeit (zeit_str, zeit, korrekt) ;
- IF NOT korrekt THEN
- BEGIN
- fehler := fehler + 2 ;
- Wandel_Time (get_time, zeit_str) ; { Fehleingabe, Einsetzen der }
- END ; { aktuellen Uhrzeit }
- IF fehler & 2 = 0 THEN Set_Time (zeit) ;
-
- IF Obj_State (system_zei, uhr) & Selected <> 0 THEN
- uhr_flag := true
- ELSE
- BEGIN
- IF uhr_flag THEN
- BEGIN
- zeit_str := ' ' ;
- FOR index := 1 TO 5 DO { Zeitanzeige löschen }
- Put_Char (zeit_str[index], 588 + index * 8, 2, 2, 0, 0) ;
- END ;
- uhr_flag := false ;
- END ;
- IF Obj_State (system_zei, alarm1) & Selected <> 0 THEN
- alarm_flag[1] := true
- ELSE
- alarm_flag[1] := false ;
-
- IF Obj_State (system_zei, alarm2) & Selected <> 0 THEN
- alarm_flag[2] := true
- ELSE
- alarm_flag[2] := false ;
-
- IF Obj_State (system_zei, alarm3) & Selected <> 0 THEN
- alarm_flag[3] := true
- ELSE
- alarm_flag[3] := false ;
-
- IF Obj_State (system_zei, alarm4) & Selected <> 0 THEN
- alarm_flag[4] := true
- ELSE
- alarm_flag[4] := false ;
-
- END ;
-
-
- {------------------------ Do_System : Verwaltet Hauptdialog ------------------}
-
- PROCEDURE Do_System ;
-
- BEGIN
- fehler := 0 ;
-
- REPEAT
- IF uhr_flag THEN
- Obj_SetState (system_zei, uhr, selected, false)
- ELSE
- Obj_SetState (system_zei, uhr, normal, false) ;
-
- IF alarm_flag[1] THEN
- Obj_SetState (system_zei, alarm1, selected, false)
- ELSE
- Obj_SetState (system_zei, alarm1, normal, false) ;
-
- IF alarm_flag[2] THEN
- Obj_SetState (system_zei, alarm2, selected, false)
- ELSE
- Obj_SetState (system_zei, alarm2, normal, false) ;
-
- IF alarm_flag[3] THEN
- Obj_SetState (system_zei, alarm3, selected, false)
- ELSE
- Obj_SetState (system_zei, alarm3, normal, false) ;
-
- IF alarm_flag[4] THEN
- Obj_SetState (system_zei, alarm4, selected, false)
- ELSE
- Obj_SetState (system_zei, alarm4, normal, false) ;
-
- Wandel_Date (get_date, datum_str) ;
- Wandel_Time (get_time, zeit_str) ;
- Set_DEdit (system_zei, sdatum, '__/__/__', '999999', datum_str,
- System_Font, TE_Left) ;
- Set_DEdit (system_zei, szeit, '__:__.__', '999999', zeit_str,
- System_Font, TE_Left) ;
- pushed := Do_Dialog (system_zei, 0) ;
- Obj_SetState (system_zei, pushed, normal, true) ;
-
- IF (pushed <> sysok) AND (pushed <> stdtext) AND (pushed <> stdgraf) THEN
- BEGIN
- End_Dialog (system_zei) ;
- fehler := 0 ;
- END ;
- IF (pushed <> sysabbr) THEN Do_Auswerten ; { Datum & Uhrzeit übernehmen }
- IF No_Dialog THEN
- BEGIN
- Alarm_Voreinstellung ;
- No_Dialog := false ;
- END ;
- IF fehler = 0 THEN
- CASE pushed OF
- stdtext : Standard_Text ; { Drucker auf Standard-Texteinstellung }
- stdgraf : Standard_Grafik ; { " " Standard-Grafikeinstellung }
- drufein : Drucker_Feineinstellung ;
- salsetz : Do_AlarmSet ; { Alarm verwalten }
- sparsetz : Parameter_Setzen ; { Tastatur-Repeat steuern }
- schalt : Do_Schalten ; { Schaltinterface bedienen }
- END ;
- IF fehler & 1 <> 0 THEN
- auswahl := Do_Alert ('[2][ Falsche Datumseingabe ! ][ Nochmal ]', 1) ;
- IF fehler & 2 <> 0 THEN
- auswahl := Do_Alert ('[2][ Falsche Uhrzeiteingabe ! ][ Nochmal ]', 1) ;
- UNTIL (fehler = 0) OR (pushed = sysabbr) ;
- IF pushed = sysok THEN End_Dialog (system_zei) ;
- END ;
-
- {-----------------------------------------------------------------------------}
- { }
- { EVENTS : Alles zur Ereignisbearbeitung }
- { }
- {-----------------------------------------------------------------------------}
-
-
- {------------------------ Event_Loop : Ereignisverwaltung --------------------}
-
- PROCEDURE Event_Loop ;
-
- VAR h_switch, i : integer ;
-
- BEGIN
- WHILE true DO
- BEGIN
- event := Get_Event (E_Timer|E_Message, 0, 0, 0, 1000,
- false, 0, 0, 0, 0,
- false, 0, 0, 0, 0,
- message, dummy, dummy, dummy, dummy, dummy, dummy) ;
-
- IF event & E_Message <> 0 THEN
- BEGIN
- IF message[0] = AC_Open THEN Do_System ;
- END ;
-
- IF (event & E_Timer <> 0) AND (event & E_Message = 0) THEN
- BEGIN
- zeit := Get_Time ;
- datum := Get_Date ;
- IF (uhr_flag) AND (log_base = screen) THEN
- BEGIN
- Wandel_Time (zeit, zeit_str) ;
- Put_Char (zeit_str[1], 596, 2, 2, 0, 0) ;
- Put_Char (zeit_str[2], 604, 2, 2, 0, 0) ;
- Put_Char (':', 612, 2, 2, 0, 0) ;
- Put_Char (zeit_str[3], 620, 2, 2, 0, 0) ;
- Put_Char (zeit_str[4], 628, 2, 2, 0, 0) ;
- END ;
-
- { Alarm testen und gegebenenfalls ausführen }
- FOR i := 1 TO 4 DO
- BEGIN
- IF (alarm_flag[i]) OR (alarm_tab[i].zustand = an) THEN
- BEGIN
- IF alarm_tab[i].zustand = an THEN { AUSSCHALTEN }
- IF alarm_tab[i].datum_aus = datum THEN
- BEGIN
- IF check_zeit (alarm_tab[i].zeit_aus, zeit) THEN
- BEGIN
- h_switch := 0 ;
- IF alarm_tab[i].extern1 = an THEN h_switch := h_switch + 1 ;
- IF alarm_tab[i].extern2 = an THEN h_switch := h_switch + 2 ;
- IF alarm_tab[i].extern3 = an THEN h_switch := h_switch + 4 ;
- IF alarm_tab[i].extern4 = an THEN h_switch := h_switch + 8 ;
- switch := switch & (~h_switch) ;
- IF h_switch <> 0 THEN Do_Switch (switch) ;
- alarm_flag[i] := false ;
- alarm_tab[i].zustand := aus ;
- END ;
- END ;
- IF alarm_tab[i].zustand = aus THEN { EINSCHALTEN }
- IF alarm_tab[i].datum_ein = datum THEN
- BEGIN
- IF (alarm_tab[i].datum_aus <> datum) OR
- NOT check_zeit (alarm_tab[i].zeit_aus, zeit) THEN
- IF check_zeit (alarm_tab[i].zeit_ein, zeit) THEN
- BEGIN
- h_switch := 0 ;
- IF alarm_tab[i].extern1 = an THEN h_switch := h_switch + 1 ;
- IF alarm_tab[i].extern2 = an THEN h_switch := h_switch + 2 ;
- IF alarm_tab[i].extern3 = an THEN h_switch := h_switch + 4 ;
- IF alarm_tab[i].extern4 = an THEN h_switch := h_switch + 8 ;
- switch := switch | h_switch ;
- IF h_switch <> 0 THEN Do_Switch (switch) ;
- alarm_tab[i].zustand := an ;
- IF (alarm_tab[i].tonsignal = an) AND NOT playing
- THEN Do_Gong (1) ;
- END ;
- END ;
- END ; { alarm_flag[i] = true }
-
- END ; { FOR i := 1 TO 4 }
-
- END ; { TIMER-Event }
-
- END ;
- END ;
-
- { ========================== HAUPTPROGRAMM ================================ }
-
- BEGIN
- ap_id := Init_Gem ;
- IF ap_id > 0 THEN
- BEGIN
- IF NOT Load_Resource (rsc_filename) THEN
- BEGIN
- auswahl := Do_Alert ('[3][RSC-File nicht gefunden !][ Abbruch]',1) ;
- Exit_Gem ;
- Halt ;
- END ;
-
- eintrag := ' System' ; { Eintrag in Menüzeile festlegen }
- dummy := Menu_Register (ap_id, eintrag) ;
-
- Init_Mouse ;
- Find_Dialog (system, system_zei) ; Center_Dialog (system_zei) ;
- Find_Dialog (drucker, drucker_zei) ; Center_Dialog (drucker_zei) ;
- Find_Dialog (alarmset, alarmset_zei) ; Center_Dialog (alarmset_zei) ;
- Find_Dialog (paramset, param_zei) ; Center_Dialog (param_zei) ;
-
- Make_Schalten ; /ננננ∞ננα≡`⓪⇨|?מ üßt◆Éd`⓪`r⇨⑧aץ8aÄ k»nstruieren }
-
- Initialisiere ; { Standardwerte setzen }
-
- Do_Gong(1) ;
-
- Event_Loop ;
- END ;
- END.
-